/*
 * 
 */
package co.edu.udistrital.erpgrid.web.general.bean;

import java.util.Map;

import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

import org.apache.myfaces.custom.tree2.TreeModel;
import org.apache.myfaces.custom.tree2.TreeModelBase;
import org.apache.myfaces.custom.tree2.TreeNodeBase;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import co.edu.udistrital.erpgrid.web.general.util.TreeNodeERP;

// TODO: Auto-generated Javadoc
/**
 * La Clase MenuTreeBean. Encargada de generar el menu del aplicativo administrador de nodos.
 */
@Component(value = "menuBean")
@Scope("session")
public class MenuTreeBean {

	/**
	 * El tree model. objeto para pintar la estructura de arbol
	 * @uml.property  name="treeModel"
	 * @uml.associationEnd  multiplicity="(1 1)"
	 */
	private TreeModel treeModel;

	/**
	 * El ICON o_ abierto.
	 * @uml.property  name="iCONO_ABIERTO"
	 */
	private transient final String ICONO_ABIERTO = "/paginas/imagenes/blue-folder-open.png";
	
	/**
	 * El ICON o_ cerrado.
	 * @uml.property  name="iCONO_CERRADO"
	 */
	private transient final String ICONO_CERRADO = "/paginas/imagenes/blue-folder-closed.png";
	
	/**
	 * El ICON o_ crear.
	 * @uml.property  name="iCONO_CREAR"
	 */
	private transient final String ICONO_CREAR = "/paginas/imagenes/crear.png";
	
	/**
	 * El ICON o_ editar.
	 * @uml.property  name="iCONO_EDITAR"
	 */
	private transient final String ICONO_EDITAR = "/paginas/imagenes/editar.png";
	
	/**
	 * El ICON o_ consultar.
	 * @uml.property  name="iCONO_CONSULTAR"
	 */
	private transient final String ICONO_CONSULTAR = "/paginas/imagenes/consultar.png";
	
	/**
	 * El ICON o_ eliminar.
	 * @uml.property  name="iCONO_ELIMINAR"
	 */
	private transient final String ICONO_ELIMINAR = "/paginas/imagenes/eliminar.png";
	
	/** El LOG. para la salida del sistema */
	private static org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(MenuTreeBean.class);

	/**
	 * Nueva instancia de menu tree bean.
	 */
	public MenuTreeBean() {
		super();
		init();
	}

	/**
	 * Inicia. la creación del menu.
	 */
	public void init() {
		treeModel = buildTreeModel();
	}

	/**
	 * Construye el tree model. con las opciones de administracion de nodos.
	 *
	 * @return el tree model base
	 */
	public TreeModelBase buildTreeModel() {

		// Crear la raiz del arbol
		TreeNodeBase root = new TreeNodeERP("nonActionNode", "ERP",
				"Opciones ERP", "root", false, ICONO_ABIERTO, ICONO_CERRADO);

		// Crear un nodo
		TreeNodeBase administracion = new TreeNodeERP("nonActionNode",
				"Administración", "Administración", "administracion", false,
				ICONO_ABIERTO, ICONO_CERRADO);
		// Crear un nodo
		TreeNodeBase gestionDocumentos = new TreeNodeERP("nonActionNode",
				"Gestión de Documentos", "Gestión de Documentos",
				"gestionDocumentos", false, ICONO_ABIERTO, ICONO_CERRADO);
		// Crear un nodo
		TreeNodeBase accounting = new TreeNodeERP("nonActionNode",
				"Contabilidad", "Contabilidad", "contabilidad", false,
				ICONO_ABIERTO, ICONO_CERRADO);

		
		// Agregar el nodo al root
		root.getChildren().add(administracion);
		
		TreeNodeERP crear  = new TreeNodeERP("actionList", "Nodos", "Creacion de nodos", "creaNodo",
				true, ICONO_CREAR, null);
		crear.setBean("gridBean");
		crear.setPagina("paginas/trabajos/gridNodos.jsf");
		
		
		administracion.getChildren().add(crear);

		TreeModelBase treeModelWrapper = new TreeModelBase(root);

		return treeModelWrapper;
	}
	
	/**
	 * Cambiar menu, realiza la redirección de la petición a una opcion del menu.
	 */
	public void cambiarMenu(){
		try {
			FacesContext context = FacesContext.getCurrentInstance();
			ExternalContext externalContext =  context.getExternalContext();
			//tomar parametros enviados en el componente de faces
			Map<String,String> parametros = externalContext.getRequestParameterMap();
			String bean = (String) parametros.get("bean");
			String pagina = (String) parametros.get("pagina");
			//tomar request
			HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
			request.getSession().removeAttribute(bean);//tomar session y quitar bean pasado de la session
			//redireccionar
			String contextPath = externalContext.getRequestContextPath();
			externalContext.redirect(contextPath+"/"+pagina);
			
		} catch (Exception e) {
			LOG.error(e.getMessage(),e);
		}
		
		
		
	}

	/**
	 * Obtiene el tree model.
	 * @return  el tree model
	 * @uml.property  name="treeModel"
	 */
	public TreeModel getTreeModel() {
		return treeModel;
	}

	/**
	 * Establece el tree model.
	 * @param treeModel  el nuevo tree model
	 * @uml.property  name="treeModel"
	 */
	public void setTreeModel(TreeModel treeModel) {
		this.treeModel = treeModel;
	}
}
